package com.kgc.itrip.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

/**
 * swagger2的配置类
 * knife4j的地址：https://doc.xiaominfo.com/knife4j/documentation/
 * @author lrg on 2021/3/11
 * @since 1.0.0
 */
@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfiguration {

    /**
     * 通过createRestApi函数创建Docket的Bean之后，
     * apiInfo()用来创建该Api的基本信息（这些基本信息会展现在文档页面中）
     * select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现，
     * apis()函数扫描所有Controller中定义的API， 并产生文档内容（除了被@ApiIgnore指定的请求）
     * <bean id="createRestApi" class="springfox.documentation.spring.web.plugins.Docket">
     *
     * </bean>
     * @return
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())//这两句是检索需要提取的API，这里没有做任何处理，主要是交个@ApiOperation()和@ApiIgnore()
                .paths(PathSelectors.any())//指定的包路径下的所有cn.itrip.controller
                .build();
    }

    /**
     * 该套 API 说明，包含作者、简介、版本、host、服务URL
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("SpringBoot集成knife4j")
                .contact(new Contact("lrg","null","name@example.com"))
                .version("0.1")
                .termsOfServiceUrl("http://localhost:8080/")
                .description("SpringBoot集成Swagger")
                .build();
    }
}
